package com.gitee.l0km.beanfilter.annotations;

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import com.gitee.l0km.beanfilter.core.CodecPhase;
import com.gitee.l0km.beanfilter.core.CodecScope;
import com.gitee.l0km.beanfilter.core.IFilter;
import com.gitee.l0km.casban.ctor.annotations.ConstructType;

/**
 * 过滤器定义元注解
 * @author guyadong
 *
 */
@Retention(RUNTIME)
@Target(ANNOTATION_TYPE )
public @interface FilterMeta {
	/**
	 * 过滤器实现类
	 */
	@ConstructType
	Class<? extends IFilter> filterClass() default IFilter.class;
	/**
	 * 过滤器实现类名，与{@link #filterClass()}作用相同，
	 * 以字符串形式提供类型，在有些场景可以减少模组耦合
	 */
	@ConstructType(priority = 1,expect = IFilter.class)
	String filterClassName() default "";
	/**
	 * 过滤器工作的目标Java Bean类型
	 */
	Class<?> beanClass() default Object.class;
	
	/**
	 * 过滤器适用编码解码阶段
	 */
	CodecPhase phase() default CodecPhase.SERIALIZATION;
	/**
	 * 过滤适用的编解码(序列化/反序列化)目标范围
	 */
	CodecScope scope() default CodecScope.ALL;
}
